package com.hsurosy.hsuchain.nft.api.order;

import com.hsurosy.hsuchain.nft.api.order.model.TradeOrderVO;
import com.hsurosy.hsuchain.nft.api.order.request.*;
import com.hsurosy.hsuchain.nft.api.order.response.OrderResponse;
import com.hsurosy.hsuchain.nft.base.response.PageResponse;
import com.hsurosy.hsuchain.nft.base.response.SingleResponse;

/**
 * 订单门面服务接口
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-04 17:08
 * @Description
 * @Version: v1.0.0
 */
public interface OrderFacadeService {

    /**
     * 创建订单
     *
     * @param request 订单创建请求
     * @return 订单响应
     */
    public OrderResponse create(OrderCreateRequest request);

    /**
     * 取消订单
     *
     * @param request 订单取消请求
     * @return 订单响应
     */
    public OrderResponse cancel(OrderCancelRequest request);

    /**
     * 订单超时处理
     *
     * @param request 订单超时请求
     * @return 订单响应
     */
    public OrderResponse timeout(OrderTimeoutRequest request);

    /**
     * 订单确认
     *
     * @param request 订单确认请求
     * @return 订单响应
     */
    public OrderResponse confirm(OrderConfirmRequest request);

    /**
     * 订单支付
     *
     * @param request 订单支付请求
     * @return 订单响应
     */
    public OrderResponse pay(OrderPayRequest request);

    /**
     * 获取订单详情
     *
     * @param orderId 订单ID
     * @return 订单详情响应
     */
    public SingleResponse<TradeOrderVO> getTradeOrder(String orderId);

    /**
     * 获取订单详情
     *
     * @param orderId 订单ID
     * @param userId  用户ID
     * @return 订单详情响应
     */
    public SingleResponse<TradeOrderVO> getTradeOrder(String orderId, String userId);

    /**
     * 订单分页查询
     *
     * @param request 订单分页查询请求
     * @return 订单分页查询响应
     */
    public PageResponse<TradeOrderVO> pageQuery(OrderPageQueryRequest request);
}
